#include "KamaCoder.h"
using namespace std;

// 构建并查集代码
// 初始化并查集
void KamaCoder108::init(int n) {
  for (int i = 1; i <= n; i++) {
    father[i] = i;
  }
}
// 找到根节点

int KamaCoder108::find(int x) {
  if (father[x] != x) {
    father[x] = find(father[x]);  // 路径压缩
  }
  return father[x];
}

// 判断两个节点是都在一个并集中
bool KamaCoder108::isSame(int x, int y) {
  x = find(x);
  y = find(y);
  return x == y;
}
// 将两个节点合并到一个并集中
void KamaCoder108::join(int x, int y) {
  x = find(x);
  y = find(y);
  if (x == y) return;  // 已经在一个并集中
  father[x] = y;       // 合并并查集
}

// 主函数，用于处理输入和输出结果
int KamaCoder108::run() {
  // 输入数据
  int m, s, t;
  cin >> m;
  init(m);  // 初始化并查集
  for (int i = 0; i < m; i++) {
    cin >> s >> t;
    // 判断是否在一个并集中
    if (isSame(s, t)) {
      cout << s << " " << t << endl;  // 输出结果
      return 0;                       // 退出程序
    }
    join(s, t);  // 将两个节点合并到一个并集中
  }
  return 0;
}